package com.xncoding.pos.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.stereotype.Component;

/**
 * spring.security配置
 *
 * @Author guoyb
 * @Date 2020/3/13  16:37
 */
@Component
@Slf4j
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    /**
     * 忽略验证的URL
     */
    @Value("${spring.security.ignoring.path}")
    String[] ignoringPaths;

    /**
     * 验证的url
     */
    @Value("${spring.security.basic.path}")
    String[] paths;

    @Value("${spring.security.basic.enabled}")
    boolean enabled;

    @Override
    public void configure(WebSecurity web) throws Exception {
        log.info("Securi配置:ignoringPaths-----打印日志------{}", ignoringPaths);
        web.ignoring().antMatchers(ignoringPaths);
    }


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        if (enabled) {
            http.authorizeRequests()//开启登录配置
                    .antMatchers(paths).fullyAuthenticated()//表示访问 /XXXX 这个接口，需要具备 XXX 这个角色
                    .anyRequest().authenticated()//表示剩余的其他接口，登录之后就能访问
                    .and()
                    .formLogin()
                    //指定登录页的路径
                    // .loginPage("/hello")
                    //指定自定义form表单请求的路径
                    // .loginProcessingUrl("/authentication/form")
                    // .failureUrl("/login?error")
                    // .defaultSuccessUrl("/success")
                    //必须允许所有用户访问我们的登录页（例如未验证的用户，否则验证流程就会进入死循环）
                    //这个formLogin().permitAll()方法允许所有用户基于表单登录访问/login这个page。
                    .permitAll();
            //默认都会产生一个hiden标签 里面有安全相关的验证 防止请求伪造 这边我们暂时不需要 可禁用掉
            http.csrf().disable();
        }

    }

}
